import { reqspecslist, reqspecscount } from "../../http/api"
let state = {
    // 1.初始化数据
    list: [],
    total: 0, //总数
    size: 2, //每页展示的数
    page: 1,//第几页
}
let getters = {
    // 2.导出list 
    list(state) {
        return state.list
    },
    total(state) {
        return state.total
    },
    size(state) {
        return state.size
    },
    page(state) {
        return state.page
    },
}

let mutations = {
    // 3.修改list 
    changeList(state, list) {
        state.list = list;
    },
    changeTotal(state, total) {
        state.total = total;
    },
    changepage(state, page) {
        state.page = page;
    }
}

let actions = {
    // 4.list逻辑
    reqList({ dispatch }) {
        //调用请求列表
        dispatch("reqSpecsList")
        // 调用请求总数
        dispatch("reqTotal")
    },

    // 请列表
    reqSpecsList({
        commit,
        dispatch,
        state: {
            size,
            page
        }
    }, all = false) {
        let params = all ? {} : {
            page,
            size
        }
        reqspecslist(params).then(res => {
            if (res.data.code == 200) {
                // 如果取到了空数组，当前页码不是第1页，需要取上一页的数据
                let arr = res.data.list ? res.data.list : []
                if (arr.length == 0 && page != 1) {
                    //通知mutations修改page 
                    commit("changepage", page - 1)
                    //请求列表
                    dispatch("reqSpecsList")
                    return
                }
                commit("changeList", arr)
            }
        })
    },
    // 请总数
    reqTotal({ commit }) {
        reqspecscount().then(res => {
            if (res.data.code == 200) {
                // 修改total
                commit("changeTotal", res.data.list[0].total)
            }
        })
    },
    // 页码改变事件
    changePage({ commit, dispatch }, page) {
        // 修改page
        commit("changepage", page)
        // 请列表
        dispatch("reqSpecsList")
    }
}

export default {
    state,
    getters,
    mutations,
    actions,
    //命名空间
    namespaced: true
}